<template>
  <v-container>
    <h1>更新操作</h1>
    <p>
      可以通过 spring-data-jpa 提供的 save 方法，这个方法通过是先通过
      <code>findById</code> 查询要保存的数据是不是新的，如果是新的，调用insert
      方法，如果不是，调用更新方法， 是全字体更新。
    </p>
    <p>
      如果查询只更新个别字段就要自己写更新语句, 在Repository 中增加一个类似下面的方法声明
    </p>
    <pre>
    @Transactional
    @Modifying
    @Query("update UserInfoEntity t set t.deleted = :deleted where t.userId = :id")
    int updateDeleted(@Param("id") String id, @Param("deleted") YesOrNo deleted);
  </pre>
    <p>这里的 <code>@Modifying</code> 是必须的</p>
  </v-container>
  <v-container>
    <v-row>
      <v-col>
        <h2>涉及到的方法</h2>
      </v-col>
    </v-row>
    <v-row>
      <v-col>
        <p>com.zoro.dyformservice.business.user.repository.UserRepository.updateDeleted</p>
      </v-col>
    </v-row>
    <v-row>
      <v-col>
        <h3>测试时需要注意的问题</h3>
      </v-col>
    </v-row>
    <v-row>
      <v-col>
        <p>在使用 <code>DataJpaTest</code> 进行单元测试时，对数据库的写方法， 要增加 <code>@Transactional(propagation =
          Propagation.NOT_SUPPORTED)</code>, 因为spring-boot-test 默认将单元测试方法的事务设置成 回滚</p>
      </v-col>
    </v-row>
    <v-row>
      <v-col>
        <p>如果需要部分更新，就自己写 sql 或者 jpql 吧， 没有好的方法. DynamicUpdate 方法会对性能有影响，并且是 hibernate 特有的方法</p>
      </v-col>
    </v-row>
  </v-container>
</template>
<script setup lang="ts">
</script>

<style scoped></style>
